home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / 051-060 / amok58 / qsort / qsort.mod < prev    next >
Text File  |  1993-11-04  |  990b  |  40 lines

  1. IMPLEMENTATION MODULE QSort;
  2.  
  3.    (* TYPE GREATERTHAN = PROCEDURE(LONGINT, LONGINT): BOOLEAN;
  4.     *                     (echt größer)
  5.     *
  6.     * TYPE SWAP     = PROCEDURE(LONGINT, LONGINT);
  7.     *)
  8.  
  9.  
  10.  
  11.  
  12.    PROCEDURE QSort(start, end: LONGINT;
  13.                    gt: GREATERTHAN; swp: SWAP);
  14.    VAR i, j: LONGINT;   (* Hilfszeiger *)
  15.  
  16.    BEGIN (* QSort *)
  17.  
  18.       IF start >= end THEN RETURN END;
  19.  
  20.       (* Partitionierung *)
  21.       i := start + 1; j := end;
  22.       REPEAT
  23.          WHILE NOT(gt(i,start)) AND (i < end      ) DO INC(i) END;
  24.          WHILE     gt(j,start)  AND (j > start + 1) DO DEC(j) END;
  25.          IF (i < j) THEN
  26.             swp(i,j); INC(i); DEC(j)
  27.          END
  28.       UNTIL j <= i;
  29.       IF (i = j) AND NOT(gt(i,start)) THEN INC(i) END;
  30.       IF i > end THEN swp(start, end); i := end   END;
  31.       (* Ende der Partitionierugn *)
  32.  
  33.       IF start < i-1 THEN QSort(start, i-1, gt, swp) END;
  34.       IF i     < end THEN QSort(    i, end, gt, swp) END
  35.    END QSort;
  36.  
  37.  
  38. END QSort.def
  39.  
  40.